package com.xiyuan.smartutils.function;

import java.util.function.Supplier;

/**
 * 5参数Supplier
 *
 * @author xiyuan-lgz 2024-07-20 @version v1.0.0 新建与整理
 */
@FunctionalInterface
public interface Supplier5<T, P1, P2, P3, P4, P5 extends Exception> {
    /**
     * 生成实例的方法
     *
     * @param p1 参数一
     * @param p2 参数二
     * @param p3 参数三
     * @param p4 参数四
     * @param p5 参数五
     * @return 目标对象
     */
    T get(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5);
    
    /**
     * 将带有参数的Supplier转换为无参{@link Supplier}
     *
     * @param p1 参数一
     * @param p2 参数二
     * @param p3 参数三
     * @param p4 参数四
     * @param p5 参数五
     * @return {@link Supplier}
     */
    default Supplier<T> toSupplier(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) {
        return () -> get(p1, p2, p3, p4, p5);
    }
    
    default T callWithRuntimeException(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) {
        try {
            return this.get(p1, p2, p3, p4, p5);
        }
        catch (RuntimeException e) {
            throw e;
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
